package com.eatme.core.design.pattern.creational.singleton;

import java.io.Serializable;

/**
 * 饿汉模式
 * 所谓饿汉式即为类加载时就进行实例的创建，无论使用方当前是否需要。由于类装载的过程是由类加载器（ClassLoader）来执行的，这个过程由JVM来保证同步，所以它天生线程安全。
 */
public class HungrySingleton implements Serializable {
    private final static  HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();

//    private final static  HungrySingleton HUNGRY_SINGLETON;
//
//    static {
//        HUNGRY_SINGLETON = new HungrySingleton();
//    }

    private HungrySingleton() {

        // 反射防御代码
        if (HUNGRY_SINGLETON!=null) {
            throw new RuntimeException("单例构造器禁止反射调用");
        }
    }

    public static HungrySingleton getInstance() {
        return HUNGRY_SINGLETON;
    }


    // 序列化和反序列单例模式的保证 (序列化的反序列化对单例的破坏)
    private Object readResolve() {
        return HUNGRY_SINGLETON;
    }
}
